﻿USE [GestionePolveri]
GO

/****** Object:  StoredProcedure [GP].[QuickReportInfo]    Script Date: 03/18/2013 21:37:18 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author:		Giuseppe Dattilo
-- Create date: 21/08/2012
-- Description:	Quick report Direzionale, contiene informazioni veloci sulle quantità di polvere consumate...
-- ============================================
CREATE PROCEDURE [GP].[QuickReportInfo]
	@DatamovimentoFrom          DateTime     = NULL,
	@DatamovimentoTo            DateTime     = NULL,
	@Impianti                   Varchar(200) = NULL,
	@DescrizioneImpianti        Varchar(400) = NULL,
	@Applicazione               Char(1)      = NULL,
	@Famiglia                   Varchar(20)  = NULL
AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;

    /* calcolo dei totali */
	SELECT
	sum(GP.Movimenti.Quantita) as Kg, count(GP.Movimenti.quantita) as N
	FROM GP.Movimenti
	INNER JOIN GP.Impianti ON GP.Movimenti.IDImpianto = GP.Impianti.IDImpianto
	INNER JOIN GP.causalimagazzino ON GP.Movimenti.IDcausale = GP.causalimagazzino.IDcausale
	INNER JOIN GP.composizionecolori ON GP.composizionecolori.idpolvere = GP.movimenti.idpolvere
	INNER JOIN GP.FamiglieColoriXPolveri ON GP.Movimenti.IDPolvere = GP.FamiglieColoriXPolveri.IDPolvere
	where GP.causalimagazzino.codcausale = 'S'
		  and (((@DatamovimentoFrom is null) and (@DatamovimentoTo is null)) OR (GP.Movimenti.DataMovimento between @DatamovimentoFrom and @DatamovimentoTo))
		  and ((@Impianti is null) OR (GP.Impianti.IDImpianto IN (select param from GP.fn_Parametri(@Impianti, ','))))
		  and ((@Applicazione is null) OR (GP.composizionecolori.Applicazione = @Applicazione))
		  and ((@Famiglia is null) OR (@Famiglia IN (select param from GP.fn_Parametri(GP.FamiglieColoriXPolveri.Famiglie, ','))))
		  
		  
    /* calcolo della quota parte */	
    declare @columns as varchar(max)
    	
    select @columns = coalesce(@columns + ',','') + quotename(Impianto) 
    from (
       select distinct Impianto from gp.impianti
       where IDImpianto IN (select param from GP.fn_Parametri(@Impianti, ',')) 
    ) as B 
    order by B.impianto
    
    declare @sql as varchar(max)
    declare @sql1 as varchar(max)
    declare @from as varchar(25)
    declare @to as varchar(25)
    
    set @from = CONVERT(VARCHAR, @DatamovimentoFrom, 120)
    set @to = CONVERT(VARCHAR, @DatamovimentoTo, 120)
    
    /* calcolo la quota parte dei kg. */
    if ((@DatamovimentoFrom is null) and (@DatamovimentoTo is null))
     begin
       set @sql = '
	   select * from 
			(
				SELECT
				GP.Movimenti.Quantita, GP.Impianti.Impianto
				FROM GP.Movimenti 
				INNER JOIN GP.Impianti ON GP.Movimenti.IDImpianto = GP.Impianti.IDImpianto 
				INNER JOIN GP.causalimagazzino ON GP.Movimenti.IDcausale = GP.causalimagazzino.IDcausale 
				INNER JOIN GP.composizionecolori ON GP.composizionecolori.idpolvere = GP.movimenti.idpolvere
				INNER JOIN GP.FamiglieColoriXPolveri ON GP.Movimenti.IDPolvere = GP.FamiglieColoriXPolveri.IDPolvere
				where GP.causalimagazzino.codcausale = ''S''
					  and ((''' + @Applicazione + ''' is null) OR (GP.composizionecolori.Applicazione = ''' + @Applicazione + '''))
					  and ((''' + @Famiglia + ''' is null) OR (''' + @Famiglia + ''' IN (select param from GP.fn_Parametri(GP.FamiglieColoriXPolveri.Famiglie, ''' + ',' + '''))))
			) DataTable
			PIVOT
			(
			   sum(quantita)
			   FOR Impianto IN (' + @columns + ')
			) PivotTable'
     end
    else
     begin
		set @sql = '
		select * from 
			(
				SELECT
				GP.Movimenti.Quantita, GP.Impianti.Impianto
				FROM GP.Movimenti 
				INNER JOIN GP.Impianti ON GP.Movimenti.IDImpianto = GP.Impianti.IDImpianto 
				INNER JOIN GP.causalimagazzino ON GP.Movimenti.IDcausale = GP.causalimagazzino.IDcausale 
				INNER JOIN GP.composizionecolori ON GP.composizionecolori.idpolvere = GP.movimenti.idpolvere
				INNER JOIN GP.FamiglieColoriXPolveri ON GP.Movimenti.IDPolvere = GP.FamiglieColoriXPolveri.IDPolvere
				where GP.causalimagazzino.codcausale = ''S'' 
					  and (GP.Movimenti.DataMovimento between ''' + @from + ''' and ''' + @to + ''')
					  and ((''' + @Applicazione + ''' is null) OR (GP.composizionecolori.Applicazione = ''' + @Applicazione + '''))
					  and ((''' + @Famiglia + ''' is null) OR (''' + @Famiglia + ''' IN (select param from GP.fn_Parametri(GP.FamiglieColoriXPolveri.Famiglie, ''' + ',' + '''))))
			) DataTable
			PIVOT
			(
			   sum(quantita)
			   FOR Impianto IN (' + @columns + ')
			) PivotTable'
	 end
	  
	/* calcolo la quota parte del numero di prelievi */
    if ((@DatamovimentoFrom is null) and (@DatamovimentoTo is null))
     begin
       set @sql1 = '
	   select * from 
			(
				SELECT
				GP.Movimenti.Quantita, GP.Impianti.Impianto
				FROM GP.Movimenti 
				INNER JOIN GP.Impianti ON GP.Movimenti.IDImpianto = GP.Impianti.IDImpianto 
				INNER JOIN GP.causalimagazzino ON GP.Movimenti.IDcausale = GP.causalimagazzino.IDcausale 
				INNER JOIN GP.composizionecolori ON GP.composizionecolori.idpolvere = GP.movimenti.idpolvere
				INNER JOIN GP.FamiglieColoriXPolveri ON GP.Movimenti.IDPolvere = GP.FamiglieColoriXPolveri.IDPolvere
				where GP.causalimagazzino.codcausale = ''S''
					  and ((''' + @Applicazione + ''' is null) OR (GP.composizionecolori.Applicazione = ''' + @Applicazione + '''))
					  and ((''' + @Famiglia + ''' is null) OR (''' + @Famiglia + ''' IN (select param from GP.fn_Parametri(GP.FamiglieColoriXPolveri.Famiglie, ''' + ',' + '''))))
			) DataTable
			PIVOT
			(
			   count(quantita)
			   FOR Impianto IN (' + @columns + ')
			) PivotTable'
     end
    else
     begin
		set @sql1 = '
		select * from 
			(
				SELECT
				GP.Movimenti.Quantita, GP.Impianti.Impianto
				FROM GP.Movimenti 
				INNER JOIN GP.Impianti ON GP.Movimenti.IDImpianto = GP.Impianti.IDImpianto 
				INNER JOIN GP.causalimagazzino ON GP.Movimenti.IDcausale = GP.causalimagazzino.IDcausale 
				INNER JOIN GP.composizionecolori ON GP.composizionecolori.idpolvere = GP.movimenti.idpolvere
				INNER JOIN GP.FamiglieColoriXPolveri ON GP.Movimenti.IDPolvere = GP.FamiglieColoriXPolveri.IDPolvere
				where GP.causalimagazzino.codcausale = ''S'' 
					  and (GP.Movimenti.DataMovimento between ''' + @from + ''' and ''' + @to + ''')
					  and ((''' + @Applicazione + ''' is null) OR (GP.composizionecolori.Applicazione = ''' + @Applicazione + '''))
					  and ((''' + @Famiglia + ''' is null) OR (''' + @Famiglia + ''' IN (select param from GP.fn_Parametri(GP.FamiglieColoriXPolveri.Famiglie, ''' + ',' + '''))))
			) DataTable
			PIVOT
			(
			   count(quantita)
			   FOR Impianto IN (' + @columns + ')
			) PivotTable'
	 end
	 
	 	  
	print @sql
	print @sql1
	print @from
	print @to
	
	exec(@sql)
	exec(@sql1)
		
END

GO

